ديف أوبس

جدولة المهام تلقائياً في لينكس

كيف تجدول مهامك الروتينية باستخدام أداتي Cron وAnacron في لينكس

يُعد نظام التشغيل لينكس من أكثر الأنظمة مرونة وقوة فيما يتعلق بإدارة المهام التلقائية والمهام المجدولة. ويُعزى جزء كبير من هذه القوة إلى الأدوات المدمجة مثل Cron وAnacron، اللتين تُستخدمان لتشغيل المهام الدورية والمكررة وفقاً لجداول زمنية محددة مسبقاً. يتم الاعتماد عليهما بشكل واسع في الخوادم وأنظمة التشغيل المكتبية لأتمتة صيانة النظام، وتشغيل النسخ الاحتياطية، ومزامنة البيانات، وتشغيل السكربتات الإدارية.

في هذا المقال، سيتم تناول الفرق بين Cron وAnacron، كيفية إعداد كل منهما، استخداماتهما المختلفة، وأفضل الممارسات لتسخيرهما بكفاءة عالية في بيئة العمل اليومية على نظام لينكس.


الفروق الجوهرية بين Cron و Anacron

رغم أن الأداتين تُستخدمان لجدولة المهام، فإنهما تختلفان في السلوك، الفلسفة، ومتطلبات التشغيل:

المعيار Cron Anacron
التكرار بالدقائق، بالساعات، يوميًا، أسبوعيًا… يوميًا، أسبوعيًا، شهريًا فقط
مناسب لأنظمة تعمل بشكل دائم (خوادم) تعمل بشكل غير دائم (أجهزة مكتبية ومحمولة)
تشغيل المهام الفائتة لا يشغّل المهام الفائتة يشغّل المهام الفائتة عند تشغيل الجهاز
الحاجة للامتيازات يمكن للمستخدمين العاديين استخدامه يتطلب صلاحيات الجذر غالباً

أولاً: أداة Cron – جدولة المهام الدقيقة في لينكس

1. المفهوم العام لـ Cron

Cron هو برنامج جدولة يعمل كخدمة (daemon) في الخلفية، ويقوم بتنفيذ المهام بناءً على جدول محدد يعرف باسم crontab. يتميز Cron بالدقة العالية في جدولة المهام، حيث يمكن جدولة تنفيذ أوامر كل دقيقة، أو ساعة، أو يوم، أو أسبوع.

2. تنسيق ملف Crontab

يتبع ملف Crontab تنسيقاً محدداً لخمس حقول زمنية، يليه الأمر المراد تنفيذه:

bash
* * * * * /مسار/الأمر │ │ │ │ │ │ │ │ │ └── يوم الأسبوع (0 - 7) (0 و7 كلاهما الأحد) │ │ │ └──── الشهر (1 - 12) │ │ └────── يوم الشهر (1 - 31) │ └──────── الساعة (0 - 23) └────────── الدقيقة (0 - 59)

3. مثال على استخدام Cron

مثال لتشغيل سكربت نسخ احتياطي يومي في الساعة 2 صباحاً:

bash
0 2 * * * /home/user/backup.sh

4. إدارة Crontab

  • عرض الجدول الحالي للمستخدم:

    bash
    crontab -l
  • تحرير crontab:

    bash
    crontab -e
  • حذف جدول المستخدم:

    bash
    crontab -r

5. تسجيل Cron

يمكن تتبع سجلات المهام المنفذة بواسطة cron في:

bash
/var/log/syslog # في بعض التوزيعات /var/log/cron # في توزيعات أخرى

ثانياً: أداة Anacron – المهام غير الدقيقة الموجهة لأجهزة المستخدمين

1. فكرة عمل Anacron

بعكس Cron، لا تفترض Anacron أن النظام يعمل دائماً. تُستخدم عادة في الحواسيب المحمولة أو أجهزة سطح المكتب التي قد يتم إيقاف تشغيلها. تقوم Anacron بتشغيل المهام بمجرد تشغيل الجهاز إذا فات وقت تنفيذها المجدول.

2. ملف التكوين /etc/anacrontab

يتبع تنسيقاً بسيطاً:

bash
الفاصل الزمني التأخير المعرف الأمر

مثال:

bash
1 5 cron.daily /etc/cron.daily/backup
  • 1: عدد الأيام بين كل تشغيل (هنا يوميًا)

  • 5: التأخير قبل التنفيذ (بالثواني)

  • cron.daily: معرف المهمة

  • /etc/cron.daily/backup: المسار إلى السكربت

3. مجلدات cron المرتبطة بـ Anacron

يتم تشغيل السكربتات الموجودة في المجلدات التالية عبر Anacron:

  • /etc/cron.daily/

  • /etc/cron.weekly/

  • /etc/cron.monthly/

4. تسجيل المهام

يمكن متابعة سجل تشغيل anacron في الملف:

bash
/var/log/anacron

متى تستخدم Cron أو Anacron؟

الحالة Cron Anacron
نظام يعمل دائماً (خادم) ✔️
تشغيل مهام كل دقيقة أو ساعة ✔️
جهاز قد يتم إيقاف تشغيله ✔️
تعويض المهام الفائتة تلقائيًا ✔️

استخدام مشترك: Cron + Anacron

يمكن استخدام الأداتين معًا لتغطية جميع أنواع المهام. على سبيل المثال:

  • استخدم Cron للمهام التي تتطلب تنفيذًا دقيقًا (مثل كل 5 دقائق).

  • استخدم Anacron للمهام التي يُمكن أن تنتظر حتى يعمل الجهاز (مثل النسخ الاحتياطي اليومي).

في العديد من التوزيعات مثل Ubuntu، يتم تشغيل Anacron تلقائيًا عن طريق سكربت cron الموجود في /etc/cron.d/.


نصائح وأفضل الممارسات

1. فصل المهام حسب التكرار

من الأفضل وضع السكربتات اليومية في /etc/cron.daily/، والأسبوعية في /etc/cron.weekly/ لتبقى المهام منظمة، خصوصًا في البيئات متعددة السكربتات.

2. استخدام سجلات الأخطاء

أضف إعادة التوجيه لتسجيل الإخراج والأخطاء، مثلاً:

bash
0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1

3. استخدام المتغيرات البيئية

يمكن في بداية crontab تحديد متغيرات مثل PATH وMAILTO:

bash
PATH=/usr/bin:/bin [email protected]

4. اختبار السكربتات يدويًا

قبل إضافتها إلى Cron أو Anacron، يُنصح بتجربة السكربت يدويًا لضمان عمله بالشكل المطلوب دون مشاكل صلاحيات أو مسارات خاطئة.

5. استخدام أوامر متقدمة

بعض المهام تتطلب استخدام أدوات مساعدة مثل run-parts، والتي تُستخدم لتشغيل جميع السكربتات في مجلد محدد:

bash
run-parts /etc/cron.daily

الاعتبارات الأمنية

تُعد المهام المجدولة مصدرًا محتملاً للمخاطر الأمنية في حال تم استغلالها:

  • لا تسمح للمستخدمين العاديين بإضافة مهام ما لم يكن ضرورياً. استخدم ملفات /etc/cron.allow و /etc/cron.deny.

  • تحقق من صلاحيات السكربتات المجدولة. يجب أن تكون مملوكة للمستخدم الصحيح وألا تكون قابلة للتعديل من طرف غير مخول.

  • راقب استخدام crontab من خلال سجلات النظام أو أدوات إدارة الخوادم.


الفرق بين Crontab للمستخدم والنظام

في لينكس، هناك نوعان من ملفات Crontab:

  • Crontab المستخدم: يتم إنشاؤه باستخدام الأمر crontab -e ويُخزن في /var/spool/cron/crontabs/

  • Crontab النظام: موجود في ملفات مثل /etc/crontab أو /etc/cron.d/ ويتطلب تحديد اسم المستخدم الذي سينفذ المهمة.

مثال من /etc/crontab:

bash
0 5 * * * root /usr/local/bin/cleanup.sh

أدوات مساعدة إضافية

  • at: لتشغيل أمر واحد في وقت معين.

  • systemd timers: بديل حديث لـ Cron في الأنظمة التي تعتمد على systemd، يوفر ميزات متقدمة مثل التشغيل بناءً على الأحداث.


خلاصة

إن تنظيم وجدولة المهام التلقائية في نظام لينكس من الركائز الأساسية لإدارة النظام بشكل احترافي ومستقر. باستخدام أدوات مثل Cron وAnacron، يمكن تحقيق مستوى عالٍ من الأتمتة، مما يقلل من تدخل المستخدم ويوفر الوقت ويضمن الاستمرارية. من خلال فهم الفروق بين الأداتين واستخدامهما بطريقة تكاملية، يمكن التحكم الكامل في جداول المهام اليومية، سواء كنت تدير خادمًا يعمل دون توقف أو حاسوباً شخصياً يعمل في أوقات متقطعة.


المراجع:

  1. The Linux Documentation Project – Cron and Anacron: https://tldp.org

  2. Debian Cron Manual: https://man7.org/linux/man-pages/man5/crontab.5.html